<?php

class BeritaController extends BackEndController
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
//	public $layout='//layouts/column2';
    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array(
                'allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array(
                    'create',
                    'update',
                    'index',
                    'view',
                    'admin',
                    'delete',
                    'UbahStatus',
                    'createKategori',
                    'updateKategori',
                    'AdminKategori'),
                'users' => array('admin'),),
            array(
                'deny', // deny all users
                'users' => array('*'),),);
    }

    /**
     * Displays a particular model.
     *
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $this->render('view', array(
            'model' => $this->loadModel($id),));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model = new Berita;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Berita'])) {
//            $_POST['Berita']['isi'] = Encrypt($_POST['Berita']['isi']);
//            $_POST['Berita']['content'] = Encrypt($_POST['Berita']['content']);
            $model->attributes = $_POST['Berita'];
            if ($model->save()) {
                $this->redirect(array('berita/admin'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('create', array(
            'model' => $model,
            'list_parent' => $list));
    }

    public function actionCreateKategori()
    {
        $model = new Berita;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Berita'])) {
            //$_POST['Berita']['isi'] = Encrypt($_POST['Berita']['isi']);
            $_POST['Berita']['kategori'] = 1;
            $model->attributes = $_POST['Berita'];
            if ($model->save()) {
                $this->redirect(array('berita/adminkategori'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('kategori', array(
            'model' => $model,
            'list_parent' => $list));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     *
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id)
    {
        $model = $this->loadModel($id);
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Berita'])) {
//            $_POST['Berita']['isi'] = Encrypt($_POST['Berita']['isi']);
//            $_POST['Berita']['content'] = Encrypt($_POST['Berita']['content']);
//            $de = Decrypt($_POST['Berita']['isi']);
            $model->attributes = $_POST['Berita'];
            if ($model->save()) {
                $this->redirect(array('berita/admin'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('update', array(
            'model' => $model,
            'list_parent' => $list));
    }

    public function actionUpdateKategori($id)
    {
        $model = $this->loadModel($id);
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Berita'])) {
            $model->attributes = $_POST['Berita'];
            if ($model->save()) {
                $this->redirect(array('berita/admin'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('kategori', array(
            'model' => $model,
            'list_parent' => $list));
    }

    public function actionUbahStatus($id)
    {
        $model = $this->loadModel($id);
        $model->status = !$model->status;
        $model->save();
        if ($model->kategori) $this->redirect(array('berita/adminkategori')); else
            $this->redirect(array('berita/admin'));
    }

    protected function getParentList($id = 0, $level = 0, $prefix = "-")
    {
        $listparent = array();
        $prefix_nama = '';
        for ($i = 0; $i < $level; $i++) {
            $prefix_nama .= $prefix;
        }
        $level++;
        $criteria = new CDbCriteria();
        $criteria->addCondition("parent_id=$id");
        $criteria->addCondition("kategori=1");
//        $criteria->order = "urut_halaman";
        $parents = Berita::model()->findAll($criteria);
        foreach ($parents as $parent) {
            $listparent[$parent['id']] = $parent['nama'];
            $child_parent = $this->getParentList($parent['id'], $level, $prefix);
            foreach ($child_parent as $key => $child) {
                $listparent[$key] = $child;
            }
        }
        return $listparent;
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     *
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        $this->loadModel($id)->delete();
        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $dataProvider = new CActiveDataProvider('Berita');
        $this->render('index', array(
            'dataProvider' => $dataProvider,));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        $arrParent = $this->getParentArr();
        $criteria = new CDbCriteria();
        $criteria->addCondition("kategori!=1");
        $model = Berita::model()->findAll($criteria);
        foreach ($model as $i => $news) $arrnew[] = array(
            'no' => $i + 1,
            'id' => $news['id'],
            'kategori' => $arrParent[$news['parent_id']],
            'nama' => $news['nama'],
            'status' => $news['status']);
        $arrayDataProvider = new CArrayDataProvider($arrnew, array(
            'keyField' => 'id',));
        $this->render('admin', array(
            'model' => $arrayDataProvider,));
    }

    public function actionAdminKategori()
    {
        $criteria = new CDbCriteria();
        $criteria->addCondition("kategori=1");
        $model = Berita::model()->findAll($criteria);
        foreach ($model as $i => $news) $arrnew[] =
            array('no' => $i + 1, 'id' => $news['id'], 'nama' => $news['nama'], 'status' => $news['status']);
        $arrayDataProvider = new CArrayDataProvider($arrnew, array(
            'keyField' => 'id',));
        $this->render('daftar_kategori', array(
            'model' => $arrayDataProvider,));
    }

    protected function getParentArr()
    {
        $criteria = new CDbCriteria();
        $criteria->addCondition("kategori=1");
        $model = Berita::model()->findAll($criteria);
        foreach ($model as $parent) $arr[$parent['id']] = $parent['nama'];
        return $arr;
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     *
     * @param integer $id the ID of the model to be loaded
     *
     * @return Berita the loaded model
     * @throws CHttpException
     */
    public function loadModel($id)
    {
        $model = Berita::model()->findByPk($id);
        if ($model === null) throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     *
     * @param Berita $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'berita-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
}
